package com.blackhorse.demo.myBeanFactory;

import com.blackhorse.demo.myBeanFactory.service.MyAccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Spring核心容器ApplicationContext的实现类
 * 1.ClassPathXmlApplicationContext
 * 通过加载类路径(src(普通项目)/java(maven项目))下的xml配置文件创建核心容器
 * 2.FileSystemXmlApplicationContext
 * 通过加载任意磁盘路径路径(需要访问权限))下的xml配置文件创建核心容器
 * 3.AnnotationConfigApplicationContext
 * 通过注解配置创建核心容器
 * <p>
 * 两种核心容器的加载策略：
 * ApplicationContext：单例对象适用
 * 默认加载策略为立即加载，即在加载配置文件同时将所有配置的bean对象创建出来并放入容器。
 * ApplicationContext比较智能可以根据单例或多例对象自动选择立即加载或延迟加载
 * <p>
 * BeanFactory（已过时）：多例对象适用
 * 加载策略为延迟加载，即用户使用bean对象的时候才加载配置文件创建bean对象。
 */
public class ClientWithSpring {
    public static void main(String[] args) {
        //1.获取spring核心容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ioc/applicationContext.xml");
        //2.根据id获取bean对象
        MyAccountService acconutService = applicationContext.getBean("myAccountServiceImplBySpring", MyAccountService.class);

        //3.执行对象方法
        System.out.println(acconutService);
        acconutService.saveAccount();

    }
}
